package com.lvy.hczn.front.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lvy.hczn.front.business.dto.Param;
import com.lvy.hczn.front.business.dto.SortTaskDetailDto;
import com.lvy.hczn.front.system.domain.business.GoodsBoxDetail;
import com.lvy.hczn.front.system.domain.business.ProductionProcessing;
import com.lvy.hczn.front.system.domain.business.SortTask;
import com.lvy.hczn.front.system.domain.business.UpOrDownPolicy;

import java.math.BigDecimal;
import java.util.List;

/**
 * 生产加工任务绑定Service接口
 *
 * @author ruoyi
 * @date 2024-12-23
 */
public interface ProductionProcessingService extends IService<ProductionProcessing> {

    /**
     * 查询生产加工任务绑定
     *
     * @param id 生产加工任务绑定主键
     * @return 生产加工任务绑定
     */
    ProductionProcessing selectProductionProcessingById(String id);

    /**
     * 查询生产加工任务绑定列表
     *
     * @param productionProcessing 生产加工任务绑定
     * @return 生产加工任务绑定集合
     */
    List<ProductionProcessing> selectProductionProcessingList(ProductionProcessing productionProcessing);

    /**
     * 新增生产加工任务绑定
     *
     * @param productionProcessing 生产加工任务绑定
     * @return 结果
     */
    int insertProductionProcessing(ProductionProcessing productionProcessing);

    /**
     * 修改生产加工任务绑定
     *
     * @param productionProcessing 生产加工任务绑定
     * @return 结果
     */
    int updateProductionProcessing(ProductionProcessing productionProcessing);

    /**
     * 批量删除生产加工任务绑定
     *
     * @param ids 需要删除的生产加工任务绑定主键集合
     * @return 结果
     */
    int deleteProductionProcessingByIds(String ids);

    /**
     * 删除生产加工任务绑定信息
     *
     * @param id 生产加工任务绑定主键
     * @return 结果
     */
    int deleteProductionProcessingById(String id);

    /**
     * 生成生产加工任务绑定信息
     *
     * @param sortTask       分拣主表
     * @param sortTaskDetail 分拣详情
     * @param goodsBoxDetail 货箱详情
     * @param weight         生产加工重量重量
     * @param quantity       生产加工数量
     */
    boolean taskProductionProcessing(SortTask sortTask, SortTaskDetailDto sortTaskDetail, GoodsBoxDetail goodsBoxDetail, BigDecimal weight, int quantity);

    /**
     * 根据时间段物理删除
     *
     * @param productionProcessing 分拣主表
     */
    int physicalDataDelete(ProductionProcessing productionProcessing);

    /**
     * 生产加工新原料箱列表查询
     *
     * @param param 参数
     */
    List<ProductionProcessing> selectProcessingEntryListByBoxCode(Param param);


    /**
     * 货箱离开入库后更新DetailBox表
     *
     * @param upOrDownPolicy
     * @throws Exception
     */
    void processingEntryComplete(UpOrDownPolicy upOrDownPolicy) throws Exception;
}
